package de.bht.fb6.mobisand.avoidlist.activities;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import de.bht.fb6.mobisand.avoidlist.R;
import de.bht.fb6.mobisand.avoidlist.model.ToAvoid;
import de.bht.fb6.mobisand.avoidlist.persistence.local.LocalToAvoidHandler;
import de.bht.fb6.mobisand.avoidlist.persistence.rest.ToAvoidRest;
import de.bht.fb6.mobisand.avoidlist.view.ToAvoidArrayAdapter;

/**
 * Verwaltet die Ansicht einer Liste von ToAvoids.
 * 
 * @author Mario D??rwald, Bruno Kirschner
 * @since 07. Jan. 2013
 */
public class ListToAvoidActivity extends Activity{
	
	/**
	 * Da wir an die SingleToAvoidActivity keine Objete belibigen Types
	 * ??bermitteln k??nnen (nur die Grundtypen wie int, bool, etc...),
	 * muss es f??r die andere Activity m??glich sein auf die Liste selbst
	 * zu zugreifen und wir geben ihr nur die entsprechende Indexposition
	 * des angeklickten Items.
	 */
    private static List<ToAvoid> toAvoidList = new ArrayList<ToAvoid>();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		/** Setzt die ListAnsicht als Aktuelle Ansicht R.layut.listview_full == ListView in die die Items eingef??llt werden sollen**/
		setContentView(R.layout.listview_full);
               
        /** Greift auf die ListAnsicht zu - R.id.list == ID der ListView in R.layout.listview_full **/
        ListView toAvoidListView = (ListView)findViewById(R.id.list);
        
        /** Erzeugt einen lokalen DBHandler **/
        LocalToAvoidHandler dbHandler = new LocalToAvoidHandler(this.getApplicationContext());
        
        /** Erzeugt eine Instanz unserer eigenen ArrayAdapter Klasse **/
        /** Und sagt:
         * 		Ich bin dein Context;
         * 		Deine Items haben folgendes Layout;
         * 		DAS sind deine Items
         ***/
        ListToAvoidActivity.toAvoidList = dbHandler.getAllToAvoids();
        
        /** Falls eine nicht Leere Menge an ToAvoids aus der Datenbank geladen wurde ..**/
        if (ListToAvoidActivity.toAvoidList != null && !ListToAvoidActivity.toAvoidList.isEmpty()) {
        	/** ... speichere die auf den Server **/
        	ToAvoidRest.saveToAvoidList(ListToAvoidActivity.toAvoidList);
        }
        
        /** Lade die ToAvoids wieder vom Server **/
        ListToAvoidActivity.toAvoidList = ToAvoidRest.readAllToAvoid();
        
        // #ToDo: Soll die Liste wirklich in der Klasse als static liegen?
        ToAvoidArrayAdapter adapter = new ToAvoidArrayAdapter(this, R.layout.toavoid_list_item, ListToAvoidActivity.toAvoidList);
        
        /** Setzt den Adapter f??r die View **/
        toAvoidListView.setAdapter(adapter);
        
        /**
         * Da unsere View eine Checkbox enth??llt bekommt diese CheckBox automatisch den ClickFocus.
         * Dieser muss ihr erst einmal wieder entzogen werden:
         * 
         * toavoid_list_item.xml
         * 	<CheckBox
         * 		android:focusable="false"
		 *		android:focusableInTouchMode="false"
		 *		... />
         */
        /** Was passiert wenn auf ein Item geklickt wird **/
        toAvoidListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int itemIndex,
					long arg3) {
				Intent singleToAvoidIntent = new Intent(ListToAvoidActivity.this, SingleToAvoidActivity.class);
				singleToAvoidIntent.putExtra("itemIndex", itemIndex);
				startActivity(singleToAvoidIntent);
			}
			
		});
	}
	
	/**
	 * Gibt eine Liste mit allen ToAvoids zur??ck.
	 * 
	 * @return
	 * 	Listen Element das alle ToAvoid Elemente enth??llt.
	 */
	public static List<ToAvoid> getToAvoidList() {
		return ListToAvoidActivity.toAvoidList;
	}
}
